package top.jacktgq.file

import top.jacktgq.oop.Person

/**
 @Author CandyWall
 @Date 2021/4/28--10:47
 @Description groovy操作文件
 */
def file = new File('../../../../Hello-Groovy.iml')
// 遍历文件中的每一行
file.eachLine {
    println it
}

// 获取文件中的所有内容
def text = file.getText()
println text

// 获取文件中的每一行存到list中
def lines = file.readLines()
println lines

// 读取文件部分内容
def readerBuffer = file.withReader {
    reader ->
        def buffer = new char[100]
        reader.read(buffer)
        return buffer
}

// 文件拷贝案例
def copy(String sourcePath, destPath) {
    try {
        def sourceFile = new File(sourcePath)
        // 如果sourceFile为空
        if (!sourceFile.exists()) {
            println "源文件不存在！"
        }
        def destFile = new File(destPath)
        // 首先创建目标文件
        if(!destFile.exists()) {
            destFile.createNewFile()
        }
        // 开始拷贝
        sourceFile.withReader {
            reader ->
                def content = reader.getText()
                destFile.withWriter {
                    writer ->
                        writer.append(content)
                }
        }

        return true
    } catch (Exception e) {
        e.printStackTrace()
    }

    return false
}

copy('../../../../Hello-Groovy.iml', '../../../../Hello-Groovy1.iml')

// 将groovy对象保存到文件
def saveObject(Object obj, String path) {
    try {
        def destFile = new File(path)
        if (!destFile.exists()) {
            destFile.createNewFile()
        }
        destFile.withObjectOutputStream {
            out ->
                out.writeObject(obj)
        }
        return false
    } catch (Exception e) {
        e.printStackTrace()
    }
    return true
}

// 从文件中读取groovy对象
def readObject(String path) {
    def obj = null
    try {
        def file = new File(path)
        if(!file.exists()) {
            return obj
        }
        file.withObjectInputStream {
            ois -> obj = ois.readObject()
        }
    } catch (Exception e) {
        e.printStackTrace()
    }

    return obj
}

def p = new Person(name: '空条承太郎', age: 17)
println p
saveObject(p, 'person.bin')
def p1 = readObject('person.bin')
println p1




